//让一个元素动起来 
function move(obj,attr,target,step,fn){
	var num = parseInt(getCss(obj,attr));
	step = num < target ? step : -step;
	clearInterval(obj.iTimer);
	obj.iTimer = setInterval(function(){
		num = num + step;
		if(num > target && step > 0 || num < target && step < 0 ){
			num = target;
		}
		obj.style[attr] = num + 'px';
		if(num == target){
			clearInterval(obj.iTimer);
			fn && fn();
		}
	},20);

};
// 获取计算后样式
function getCss(obj,attr){
	return parseFloat(obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj)[attr]);
}


// 随机整数[x, y]
function ranNum(x, y) {
	return Math.floor(Math.random() * (y - x + 1) + x);
}
// 随机颜色
function ranColor() {
	return "rgb(" + ranNum(0, 255) + ", " + ranNum(0, 255) + ", " + ranNum(0, 255) + ")";
}

// 绑定事件
function addEvent(obj, EType, fun) {
  if (obj.addEventListener) {
    obj.addEventListener(EType, fun);
  } else if (obj.attachEvent) {
    obj.attachEvent("on" + EType, fun);
  } else {
  	obj["on" + EType] = fun;
  }
}
// 移除元素事件
function removeEvent(obj, EType, fun) {
  if (obj.removeEventListener) {
    obj.removeEventListener(EType, fun);
  } else if (obj.detachEvent) {
    obj.detachEvent("on" + EType, fun);
  } else {
  	obj["on" + EType] = null;
  }
}
// 取消默认行为
function preventDefaultFun(event) {
	if (event.preventDefault) {
      event.preventDefault();
    } else {
      event.returnValue = false;
    }
}

// 阻止事件传播
function stopPropagationFun(event) {
	if (event.stopPropagation) {
      event.stopPropagation();
    } else {
      event.cancelBubble = true;
    }
}


// cookie 的封装
function addCookie(kName, kValue, kSeconds) {
	document.cookie = kName + "=" + kValue + ";max-age=" + kSeconds;
}
// 删除cookie
function deleteCookie(kName) {
	addCookie(kName, "", -1);
}
// 修改cookie值
function chageCookie(kName, kValue, kSec) {
	addCookie(kName, kValue, kSec);
}
// 获取cookie值
function findCookie(kName) {
	// 获取cookie
	var cookieStr = document.cookie;// user=123; pass=345; name=zs
	// 分割字符串
	var cookieArr = cookieStr.split(";");// [user=123, pass=345, name=zs]
	// 遍历字符串数组
	for (var i = 0; i < cookieArr.length; i++) {
		// 去除两端空格
		cookieArr[i] = cookieArr[i].trim();// user=123
		// 再次分割 cookieArr[i]
		var kvStr = cookieArr[i].split("=");// [user, 123]
		if (kvStr[0] == kName) {
			// 如果 数组中第一个值(即, key值) 与传入的 kName参数 一致则返回数组中的第二个值(即, value值)
			return kvStr[1];
		}
	}
	
	// 如果遍历完都没有找到对应的 key 则返回 null
	return null;
}

// 获取所有 cookie
function getAllCookies() {
	var cookieObj = {};
	// 获取cookie
	var cookieStr = document.cookie;// user=123; pass=345; name=zs
	// 分割字符串
	var cookieArr = cookieStr.split(";");// [user=123, pass=345, name=zs]
	// 遍历字符串数组
	for (var i = 0; i < cookieArr.length; i++) {
		// 去除两端空格
		cookieArr[i] = cookieArr[i].trim();// user=123
		var kvStr = cookieArr[i].split("=");// [user, 123]
		cookieObj[kvStr[0]] = kvStr[1];// {user: 123}
	}
	// user=123; pass=345; name=zs
	// {user:123, pass:345, name:zs}
	return cookieObj;
}

// 根据class获取页面元素
function getElesByClassName(obj, classN) {
  var arr = [];
  if (obj.getElementsByClassName) {
    arr = obj.getElementsByClassName(classN);
  } else {
    var eleArr = obj.getElementsByTagName("*");
    for (var i = 0; i < eleArr.length; i++) {
      if (eleArr[i].className == classN) {
        arr.push(eleArr[i]);
      }
    }
  }
  return arr;
}

// 封装函数, 处理字符串格式
function dealStrStyle(str) {
  var strs = str.split(" ");
  for (var i = 0; i < strs.length; i++) {
    if (strs[i] == "") {
      strs.splice(i, 1);
      i--;
    }
  }
  // 返回调整好格式的字符串
  return strs.join(" ");
}

// 封装函数, 根据 选择器 获取页面元素
// sel 是选择器: #one, .two, div
function $(sel) {
  // sel ---- .oneDiv .one p
  // 整理选择器格式
  sel = dealStrStyle(sel);
  // 分割选择器
  var sels = sel.split(" ");// [.oneDiv, .one, p]

// sels[0] --- .oneDiv  ------ document
// sels[1] --- .one -- 第一次查找之后得到的子元素中再查找
// sels[2] --- p ----- 第二次查找之后得到的子元素中再查找
  var parent = [document];
  var child = [];
  for (var i = 0; i < sels.length; i++) {
    var seleter = sels[i];// .oneDiv
    // 对上次查找得到的父元素进行遍历
    for (var j = 0; j < parent.length; j++) {
      // 获取 seleter 中的第一个字母
      var firstLetter = seleter.substring(0, 1);
      if (firstLetter == "#") {
        // 获取选择器(删掉#)
        seleter = seleter.substring(1);
        // 根据 id 获取元素
        var ele = parent[j].getElementById(seleter);
        // 添加到保存子元素的数组中
        child.push(ele);
      } else if (firstLetter == ".") {
        // 获取选择器(删掉.)
        seleter = seleter.substring(1);
        // 根据 class 获取元素
        var childEles = getElesByClassName(parent[j], seleter);
        // 添加给 child
        transferArray(child, childEles);
      } else {
        // 根据标签名查询
        var childEles = parent[j].getElementsByTagName(seleter);
        // 添加给 child
        transferArray(child, childEles);
      }
    }
    // 代码执行到此处说明给上一次的父元素都遍历完了
    // child 中的值 传递给 parent
    parent = [];
    transferArray(parent, child);
    child = [];
  }
  // 代码走到此处说明选择器遍历结束, 此时parent数组中存储的就是我们想要查找的元素
  return parent;
}
// 将一个数组中的值, 添加给另一个数组
function transferArray(desArr, souArr) {
  for(var i = 0; i < souArr.length; i++) {
    desArr.push(souArr[i]);
  }
}

// 根据简单选择器获取页面元素(#one, .one, div, p)
function getEle(sel) {
  // 截取选择器 sel 的第一个字母
  var firstLetter = sel.substring(0, 1);
  if (firstLetter == "#") {
    // 通过 id 获取页面元素
    var ele = document.getElementById(sel);
    return ele;
  } else if (firstLetter == ".") {
    // 通过 class 获取页面元素
    var eles = getElesByClassName(document, sel);
    return eles;
  } else {
    // 通过 标签名 获取元素
    var eles = document.getElementsByTagName(sel);
    return eles;
  }
  return null;
}

// 浏览器嗅探
function browserNav(bro, fun) {
  if (navigator.userAgent.indexOf(bro) != -1) {
    fun();
  }
}

// 浏览器窗口宽度，window 窗口宽度兼容性处理
function winWidth() {
	/*
	  IE 9+, chrome, Safari, Firefox, Opera中获取浏览器窗口宽度: window.innerWidth
	  在 IE6, 7, 8中获取浏览器窗口宽度: document.documentElement.clientWidth || document.body.clientWidth;
	*/
	return window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
}
// 浏览器窗口高度
function winHeight() {
	return window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
}
// 调用方法
// var winth = winWidth();
// var height = winHeight();


/*
 * AJAX
 */
// get 同步请求
function ajaxGetSync(urlS, parms, sucsFun, errFun) {
	// 1, 创建请求对象
	var xhr;
	if (window.XMLHttpRequest) {
		xhr = new XMLHttpRequest();
	} else {
		// IE 5, 6
		xhr = new ActiveXObject("Microsoft.XMLHTTP");
	}
	// 2, 配置请求(同步)
	xhr.open("get", urlS + "?" + parms, false);
	// 3, 发送请求
	xhr.send(null);
	// 4, 处理请求结果
	if (xhr.status >= 200 && xhr.status < 300 || 304 == xhr.status) {
		sucsFun(xhr);
	} else{
		errFun();
	}
}

// get 异步请求
function ajaxGetAsync(urlS, parms, sucsFun, errFun) {
	// 1, 创建请求对象
	var xhr;
	if (window.XMLHttpRequest) {
		xhr = new XMLHttpRequest();
	} else {
		// IE 5, 6
		xhr = new ActiveXObject("Microsoft.XMLHTTP");
	}
	// 2, 配置请求(异步)
	xhr.open("get", urlS + "?" + parms);
	// 3, 发送请求
	xhr.send(null);
	// 4, 处理请求结果
	xhr.onreadystatechange = function() {
		if (4 == xhr.readyState) {
			if (xhr.status >= 200 && xhr.status < 300 || 304 == xhr.status) {
				sucsFun(xhr);
			} else{
				errFun();
			}
		}
	}
}

// post 同步请求
function ajaxPostSync(urlS, parms, sucsFun, errFun) {
	// 1, 创建请求对象
	var xhr;
	if (window.XMLHttpRequest) {
		xhr = new XMLHttpRequest();
	} else {
		// IE 5, 6
		xhr = new ActiveXObject("Microsoft.XMLHTTP");
	}
	// 2, 配置请求(同步)
	xhr.open("post", urlS, false);
	// 3, 设置请求头
	xhr.setRequestHeader("CONTENT-TYPE", "application/x-www-form-urlencoded");
	// 4, 发送请求
	xhr.send(parms);
	// 5, 处理请求结果
	if (xhr.status >= 200 && xhr.status < 300 || 304 == xhr.status) {
		sucsFun(xhr);
	} else{
		errFun();
	}
}

// post 异步请求
function ajaxPostAsync(urlS, parms, sucsFun, errFun) {
	// 1, 创建请求对象
	var xhr;
	if (window.XMLHttpRequest) {
		xhr = new XMLHttpRequest();
	} else {
		// IE 5, 6
		xhr = new ActiveXObject("Microsoft.XMLHTTP");
	}
	// 2, 配置请求(异步)
	xhr.open("post", urlS);
	// 3, 设置请求头
	xhr.setRequestHeader("CONTENT-TYPE", "application/x-www-form-urlencoded");
	// 4, 发送请求
	xhr.send(parms);
	// 5, 处理请求结果
	xhr.onreadystatechange = function() {
		if (4 == xhr.readyState) {
			if (xhr.status >= 200 && xhr.status < 300 || 304 == xhr.status) {
				sucsFun(xhr);
			} else{
				errFun();
			}
		}
	}
}
// ajax 同步请求
function ajaxSync(ajaxType, urlS, parms, sucsFun, errFun) {
	if (ajaxType == "get" || ajaxType == "GET") {
		// get 同步请求
		ajaxGetSync(urlS, parms, sucsFun, errFun);
	} else if (ajaxType == "post" || ajaxType == "POST") {
		// post 同步请求
		ajaxPostSync(urlS, parms, sucsFun, errFun);
	}
}

// ajax 异步请求
function ajaxAsync() {
	if (ajaxType == "get" || ajaxType == "GET") {
		// get 异步请求
		ajaxGetAsync(urlS, parms, sucsFun, errFun);
	} else if (ajaxType == "post" || ajaxType == "POST") {
		// post 异步请求
		ajaxPostAsync(urlS, parms, sucsFun, errFun);
	}
}

//封装跨域请求
function jsonP(urlStr){
	// 1、创建script标签
	var scrptM=document.createElement('script');
	// 2、src
	scrptM.src=urlStr;
	// 3、添加到body
	document.body.appendChild(scrptM);
	// 4、从body中删除
	document.body.removeChild(scrptM);
}




// function fun1() {

// }
// function fun2() {
	
// }
// function fun3() {
	
// }


// var LiangZi = {};
// LiangZi.fun1 = function() {

// }
// LiangZi.eveObj = {
// 	fun2: function() {

// 	},
// 	fun3: function() {

// 	}
// }

// LiangZi.fun1();
// LiangZi.eveObj.fun2();
